perm filename X3.FAI[TMP,LCS] blob sn#133870 filedate 1974-11-29 generic text, type T, neo UTF8
00100	COMMENT ⊗   VALID 00010 PAGES
00200	C REC  PAGE   DESCRIPTION
00300	C00001 00001
00400	C00002 00002	TITLE X
00500	C00003 00003	BEG:	SETOM LINE
00600	C00009 00004	MAIN:	0
00700	C00010 00005		AOJ A,
00800	C00011 00006	FRD:	MOVSI A,'DMD'
00900	C00012 00007	GETNAM:	MOVEI A,
01000	C00013 00008	XINI:	OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
01100	C00016 00009	XGPOUT:	OPEN XGP,[1017↔'XGP   '↔0]
01200	C00019 00010	FILNAM:	0
01300	C00020 ENDMK
01400	C⊗;
     

00100	TITLE X
00200	
00300	A←1
00400	B←2
00500	C←3
00600	D←4
00700	E←5
00800	L←6
00900	U←7
01000	PEN←10
01100	X←11
01200	Y←12
01300	XD←13
01400	T←15
01500	TT←16
01600	P←17
01700	
01800	LPDL←←69
01900	
02000	DSK←←1
02100	XGP←←2
02200	
02300	LMAR←←=0
02400	RMAR←←=1699
02500	WIDTH←←=1700
02600	LBUFL←←=48
02700	LSTBIT←←1⊗34
02800	OVERLAP←←=50			;OVERLAP 1/4 INCH
02900	BOTTOM←←=50			;SHIFT BOTTOM UP 1/4 INCH
03000	
03100	DOFF←←-=760
03200	
03300	NBUFS←←4
03400	
03500	EXTERN JOBREL,JOBFF
03600	
03700	MAILBF:	BLOCK 40
03800	
03900	SIGN:	0
04000	LINE:	0
04100	PNTR:	0
     

00100	BEG:	SETOM LINE
00200		GETLIN LINE		;FOR ERROR PRINTOUT
00300	MERGE:	CALLI
00400		HRRZS LINE		;CLEAR LINE BITS
00500		MOVE P,[-LPDL,,PDL-1]
00600	FILIN:	OUTSTR [ASCIZ /FILE? (DEFAULT IS PLT.DMD) /]
00700		PUSHJ P,FRD
00800		SETZ A,
00900	YAGN1:	MOVE B,[-BOTTOM]
01000	OUTSTR [ASCIZ/ORIGIN X OFFSET FROM SIDE (DEFAULT IS 4(CENTER))?/]
01100		PUSHJ P,RNUM
01200		JRST [	MOVE A,[DOFF]
01300			JRST YDEF]
01400		IMULI A,=100
01500		CAIN C,"."		;DECIMAL POINT?
01600		JRST [	INCHWL C
01700			CAIN C,15
01800			INCHWL C
01900			CAIL C,"0"
02000			CAILE C,"9"
02100			JRST .+1
02200			SUBI C,60
02300			IMULI C,=10
02400			SKIPE SIGN
02500			MOVN C,C
02600			ADD A,C
02700			PUSH P,A
02800			PUSHJ P,RNUM	;JUST GOBBLE THE REST
02900			JFCL
03000			POP P,A
03100			JRST .+1]
03200		MOVN A,A
03300		LSH A,1			;*2 (MAKE IT STEPS)
03400	YDEFP:	CAIE C,12
03500		JRST [	CLRBFI
03600			JRST YAGN1]
03700	YDEF:	ADD A,B
03800		MOVNM A,INIX#
03900	AGAIN:	MOVE A,[FILNAM,,LKENT]
04000		BLT A,LKENT+3
04100		OPEN DSK,[14↔'DSK   '↔IBUF]
04200		JRST 4,.
04300		INBUF DSK,NBUFS
04400		LOOKUP DSK,LKENT
04500		JRST FNF
04600	ASKLEN:	SETZM POOB#
04700		PUSHJ P,XINI
04800		JRST CORLUZ
04900		SETZM XX#
05000		SETZM YY#
05100		SETZM PENN#
05200	OUTER:	IN DSK,
05300		JRST PLOT
05400		STATO DSK,20000
05500		JRST 4,.
05600		RELEAS DSK,
05700	IFN LSTBIT-1,<PUSHJ P,XFIX>
05800		JRST XGPOUT
05900	
06000	PENUP:	JRST @MAIN
06100	PLOT:	HRR 14,IBUF+1
06200		MOVN E,1(14)
06300		MOVSI E,(E)
06400		HRR E,IBUF+1
06500	PLOT1:	MOVE 14,2(E)
06600		JUMPE 14,ENOUT
06700		LSHC 14,-14
06800		ASH 15,-30
06900		MOVEM 15,SVPEN#
07000		MOVM D,15
07100		LSHC 14,-14
07200		ASH 15,-30
07300		MOVEM 15,SVY#
07400		MOVE C,15
07500		LSHC 14,-14
07600		ASH 15,-30
07700		MOVEM 15,SVX#
07800		CAIN D,1
07900		JRST PENOK
08000		SUBI D,3
08100		CAMN D,PENN
08200		JRST PENOK
08300		MOVE PEN,PENUP
08400		SKIPGE D
08500		MOVE PEN,[CAIGE Y,(L)]
08600	PENOK:	MOVEM D,PENN
08700		SUB 15,XX
08800		SKIPG 15
08900		MOVEI 16,4
09000		SKIPL 15
09100		MOVEI 16,10
09200		SUB C,YY
09300		SKIPG C
09400		MOVEI 0,0
09500		SKIPL C
09600		MOVEI 0,2
09700		MOVMS C
09800		MOVMS 15
09900		CAMG C,15
10000		JRST NOEX
10100		EXCH C,15
10200		EXCH 0,16
10300	NOEX:	JUMPE 15,NOMOVE
10400		JUMPE C,NORM
10500		SETZ 14,
10600		TLNE C,200000
10700		JRST .+4
10800		LSH C,1
10900		TRO C,1
11000		AOJA 14,.-4
11100		SUBI 14,=34
11200		IDIV C,15
11300		MOVNS 14
11400		LSH C,(14)
11500		SETZ 14,
11600	INLOOP:	ADD 14,C
11700		MOVE D,16
11800		TLZN 14,200000
11900		JRST OVA
12000		EXCH PEN,PENUP
12100		JSR MAIN
12200		EXCH PEN,PENUP
12300		MOVE D,0
12400	OVA:	JSR MAIN
12500		SOJG 15,INLOOP
12600		JRST .+4
12700	NORM:	MOVE D,16
12800	NORML:	JSR MAIN
12900		SOJG 15,NORML
13000		MOVE 4,SVX
13100		MOVEM 4,XX
13200		MOVE 4,SVY
13300		MOVEM 4,YY
13400	NOMOVE:	SKIPL SVPEN
13500		JRST ENOUT
13600		SETZM XX
13700		SETZM YY
13800	ENOUT:	AOBJN E,PLOT1
13900		JRST OUTER
14000	
14100	
14200	FNF:	PUSHJ P,DETCHK
14300		PUSHJ P,XERR
14400		PUSHJ P,ERRPNT
14500		ASCIZ /LOOKUP FAILED.
14600	/
14700		SKIPGE DET
14800		CALLI 12
14900		JRST FILIN
15000	
15100	CORLUZ:	MOVE T,TT
15200		LSH T,-12
15300		PUSH P,T
15400		PUSHJ P,DETCHK
15500		PUSHJ P,XERR
15600		POP P,T
15700		PUSHJ P,DECOUT
15800		PUSHJ P,ERRPNT
15900		ASCIZ / K OF CORE NEEDED!
16000	/
16100		SKIPGE DET
16200		CALLI 12
16300		JRST ASKLEN
16400	
16500	LOSE:	SKIPN POOB
16600		TLNN PEN,400000
16700		JRST @MAIN
16800		SETOM POOB
16900		PUSHJ P,DETCHK
17000		PUSHJ P,XERR
17100		PUSHJ P,ERRPNT
17200		ASCIZ /POINT OUT OF BOUNDS, /
17300		CAIGE Y,(L)
17400		JRST [	PUSHJ P,ERRPNT
17500			ASCIZ/-Y/
17600			JRST BACTT]
17700		PUSHJ P,ERRPNT
17800		ASCIZ/+Y/
17900	BACTT:	MOVE TT,SVTT#
18000		JRST @MAIN
18100	
18200	DECOUT:	IDIVI T,=10
18300		HRLM TT,(P)
18400		SKIPE T
18500		PUSHJ P,DECOUT
18600		HLRZ TT,(P)
18700		ADDI TT,60
18800		ROT TT,-7
18900		MOVEM TT,.+2
19000		PUSHJ P,ERRPNT
19100		0
19200		POPJ P,
19300	
19400	ERRPNT:	MOVEM TT,SVTT
19500		HRRZ TT,(P)
19600		MOVEM TT,PNTR
19700		MOVEI TT,LINE
19800		TTYMES TT,
19900		JRST [	OUTSTR[ASCIZ/TTYMES FAILED	/]
20000			OUTSTR @PNTR
20100			OUTSTR[ASCIZ/
20200	/]
20300			JRST .+1]
20400		POP P,TT
20500		HRL TT,(TT)
20600		TLNE TT,376
20700		AOJA TT,.-2
20800		JRST 1(TT)
20900	
21000	XERR:	PUSHJ P,ERRPNT
21100		ASCIZ/
21200	MESSAGE FROM X WORKING ON /
21300		MOVE TT,FILNAM
21400		PUSHJ P,SIXOUT
21500		PUSHJ P,ERRPNT
21600		ASCIZ/./
21700		HLLZ TT,FILEXT
21800		PUSHJ P,SIXOUT
21900		PUSHJ P,ERRPNT
22000		ASCIZ/[/
22100		MOVE TT,FILPPN
22200		PUSHJ P,SIXOUT
22300		PUSHJ P,ERRPNT
22400		ASCIZ/] : /
22500		POPJ P,
22600	
22700	SIXOUT:	JUMPE TT,CPOPJ
22800		SETZ T,
22900		LSHC T,6
23000		ADDI T,40
23100		PUSH P,TT
23200		ROT T,-7
23300		MOVEM T,.+2
23400		PUSHJ P,ERRPNT
23500		0
23600		POP P,TT
23700		JRST SIXOUT
23800	
23900	DETCHK:	SETOM DET#
24000		GETLIN DET
24100		HRRES DET
24200		SKIPL DET
24300		AOS (P)
24400		POPJ P,
     

00100	MAIN:	0
00200		JRST MVDWN(D)
00300	MVDWN:	SUBI Y,LBUFL+1
00400		JRST DOPEN
00500	MVUP:	ADDI Y,LBUFL+1
00600		JRST DOPEN
00700	MVLFT:	ROT B,-1
00800		JUMPGE B,DOPEN
00900		XCT XMOVR(X)
01000		JRST DOPEN
01100	MVRT:	SKIPGE B
01200		XCT XMOVL(X)
01300	DOI3:	ROT B,1
01400	DOPEN:	XCT PEN
01500		JRST LOSE
01600		CAIL Y,-LBUFL-1(U)
01700		JRST LOSE
01800		IORM B,@X
01900		JRST @MAIN
02000	
     

00100		AOJ A,
00200	XMOVL:	HRLOI X,XD
00300		REPEAT LBUFL-1,<SOJ X,>
00400		SOJL A,.+1
00500		MOVE X,[Y,,LBUFL-1]
00600		AOJA A,DOI3
00700	
00800		SOJL A,XONR
00900	XMOVR:	REPEAT LBUFL-1,<AOJ X,>
01000		MOVE X,[XD,,LBUFL]
01100		AOJ A,
01200	
01300	XONR:	MOVSI X,Y
01400		AOJA A,DOPEN
     

00100	FRD:	MOVSI A,'DMD'
00200		MOVEM A,FILEXT
00300		PUSHJ P,GETNAM
00400		SKIPN A
00500	 	MOVE A,['PLT   ']
00600	    	MOVEM A,FILNAM
00700		CAIE C,"."
00800		JRST NOEXT
00900		PUSHJ P,GETNAM
01000		MOVEM A,FILEXT
01100	NOEXT:	CAIE C,"["
01200		JRST FRDX
01300		PUSHJ P,GETP
01400		HRLZM A,FILPPN
01500		PUSHJ P,GETP
01600		HRRM A,FILPPN
01700	FRDX:	INCHRW C
01800		CAIE C,12
01900		JRST FRDX
02000		POPJ P,
02100	
02200	RNUM:	INCHWL C
02300		CAIN C,15
02400		JRST RNUM
02500		CAIN C,12
02600		POPJ P,
02700		AOS (P)
02800		MOVEI A,
02900		SETZM SIGN
03000		CAIN C,"-"
03100		JRST [	PUSHJ P,RNUML
03200			SETOM SIGN
03300			MOVN A,A
03400			POPJ P,]
03500		CAIN C,"+"
03600	RNUML:	INCHWL C
03700		CAIL C,"0"
03800		CAILE C,"9"
03900		JRST RNUMX
04000		IMULI A,12
04100		ADDI A,-"0"(C)
04200		JRST RNUML
04300	
04400	RNUMX:	CAIN C,15
04500		INCHRW C
04600		POPJ P,
     

00100	GETNAM:	MOVEI A,
00200		MOVE B,[440600,,A]
00300	GETNML:	PUSHJ P,RCH
00400		POPJ P,
00500		SUBI C,40
00600		TLNE B,770000
00700		IDPB C,B
00800		JRST GETNML
00900	
01000	GETP:	MOVEI A,
01100	GETPL:	PUSHJ P,RCH
01200		POPJ P,
01300		TRNE A,770000
01400		JRST GETPL
01500		LSH A,6
01600		ADDI A,-40(C)
01700		JRST GETPL
01800	
01900	RCH:	INCHWL C
02000		CAIN C,42
02100		JRST RCHQ
02200		CAIE C,11
02300		CAIN C," "
02400		JRST RCH
02500		CAIE C,"."
02600		CAIN C,","
02700		POPJ P,
02800		CAIE C,"["
02900		CAIN C,"]"
03000		POPJ P,
03100	RCHQR:	CAIGE C,40
03200		POPJ P,
03300		CAIL C,"a"
03400		CAILE C,"z"
03500		CAIA
03600		SUBI C,40
03700		JRST POPJ1
03800	
03900	RCHQ:	INCHWL C
04000		JRST RCHQR
     

00100	XINI:	OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (Y DIMENSION, DEFAULT = 11)?/]
00200		PUSHJ P,RNUM
00300		MOVEI A,=11		;ASSUME 11 INCHES
00400		JUMPLE A,[XINLER:CLRBFI
00500			JRST XINI]
00600		CAIE C,12
00700		JRST XINLER
00800		IMULI A,=200
00900		PUSH P,A		;SAVE THIS
01000	YINI1:	OUTSTR [ASCIZ \ORIGIN Y OFFSET FROM BOTTOM, 200/IN.(DEFAULT IS 100)?\]
01100		PUSHJ P,RNUM
01200		JRST [	MOVEI A,=100
01300			JRST IYDEF]
01400		CAIE C,12
01500		JRST [	CLRBFI
01600			JRST YINI1]
01700	IYDEF:	IMULI A,LBUFL+1
01800		MOVEM A,IYPOS#
01900		POP P,A
02000	XDEF:	MOVEM A,LINCNT#
02100		MOVEI B,-1(A)
02200		IMULI A,LBUFL+1
02300		MOVE T,JOBFF
02400		MOVEM T,XGPPTR
02500		SOS XGPPTR
02600		MOVEI T,2(A)		;2 EXTRA WORDS
02700		MOVNI TT,(T)
02800		ADD T,XGPPTR
02900		HRLM TT,XGPPTR
03000		MOVE TT,T
03100		CALLI T,11
03200		POPJ P,
03300		HRRZ L,XGPPTR
03400		MOVSI T,1(L)
03500		HRRI T,2(L)
03600		SETZM 1(L)
03700		MOVE U,JOBREL
03800		BLT T,(U)
03900		MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
04000		MOVEM TT,1(L)		;FIRST ONE HAS MARK AND CUT WITH IT
04100		TLZ TT,400000		;DELETE MARK AND CUT
04200		MOVEI T,1+LBUFL+1(L)
04300	XINL:	MOVEM TT,(T)
04400		ADDI T,LBUFL+1
04500		SOJG B,XINL
04600		MOVSI TT,400100
04700		MOVEM TT,(T)
04800		MOVE PEN,PENUP
04900		MOVE Y,IYPOS
05000		ADDI Y,2(L)
05100		MOVEI XD,DBUF+1
05200		SKIPL A,INIX		;WHERE DO WE START
05300		JRST MAYBON
05400		SUBI A,43
05500		IDIV A,[-44]
05600		HRLOI X,XD
05700		SOJA A,SETB
05800	
05900	MAYBON:	ADDI A,43
06000		IDIVI A,44
06100		CAILE A,LBUFL
06200		JRST OFFRT
06300		MOVE X,A
06400		SETZ A,
06500		HRLI X,Y
06600		JRST SETB
06700	
06800	OFFRT:	MOVE X,[XD,,LBUFL]
06900		SUBI A,LBUFL
07000	SETB:	MOVE B,INIX
07100		IDIVI B,44
07200		MOVSI B,400000
07300		MOVN C,C
07400		ROT B,(C)
07500	POPJ1:	AOS (P)
07600	CPOPJ:	POPJ P,
     

00100	XGPOUT:	OPEN XGP,[1017↔'XGP   '↔0]
00200		JRST NOXGP
00300		OUTSTR[ASCIZ/CRANKING XGP
00400	/]
00500		LOCK
00600	OUTIT:	OUT XGP,XGPPTR
00700		JRST OUTOK
00800	DSKERR:	PUSHJ P,DETCHK
00900		PUSHJ P,XERR
01000		PUSHJ P,ERRPNT
01100		ASCIZ /XGP OUTPUT ERROR.
01200	/
01300	OUTOK:	UNLOCK
01400		RELEAS XGP,
01500		JRST XMORE
01600	
01700	XMORE:	PUSHJ P,CORDWN			;REALLY DONE, CORE DOWN
01800		PUSHJ P,DETCHK
01900		JRST DODEL			;DELETE AUTOMATICALLY IF DETACHED
02000		OUTSTR[ASCIZ/DELETE .DMD FILE?/]
02100		INCHRW C
02200		CAIN C,15
02300		INCHRW C
02400		CAIE C,12
02500		OUTSTR[ASCIZ/
02600	/]
02700		CAIE C,"Y"
02800		CAIN C,"y"
02900		CAIA
03000		JRST NODEL
03100	DODEL:	MOVE A,[FILNAM,,LKENT]
03200		BLT A,LKENT+3
03300		INIT DSK,17
03400		'DSK   '
03500		0
03600		JRST [	SKIPGE DET
03700			PUSHJ P,XERR
03800			PUSHJ P,ERRPNT
03900			ASCIZ/COULDN'T GET DISK FOR DELETE!
04000	/
04100			JRST NODEL]
04200		LOOKUP DSK,LKENT
04300		JRST [	SKIPGE DET
04400			PUSHJ P,XERR
04500			PUSHJ P,ERRPNT
04600			ASCIZ/LOOKUP FOR DELETE FAILED!
04700	/
04800			JRST NODEL]
04900		MOVE A,FILPPN
05000		MOVEM A,LKENT+3
05100		SETZM LKENT
05200		RENAME DSK,LKENT
05300		CAIA
05400		JRST NODEL
05500		SKIPGE DET
05600		PUSHJ P,XERR
05700		PUSHJ P,ERRPNT
05800		ASCIZ/RENAME FOR DELETE FAILED!
05900	/
06000	NODEL:	RELEASE DSK,
06100		SKIPGE DET
06200		PUSHJ P,XERR
06300		PUSHJ P,ERRPNT
06400		ASCIZ/ALL DONE!
06500	/
06600		CALLI 12		;LEAVE
06700	
06800	NOXGP:	PUSHJ P,DETCHK
06900		PUSHJ P,XERR
07000		PUSHJ P,ERRPNT
07100		ASCIZ /XGP NOT AVAILABLE (I THOUGHT I WAS WAITING FOR IT)!
07200	/
07300		POPJ P,
07400	
07500	XGPPTR:	BLOCK 2
07600	
07700	IFN LSTBIT-1,<
07800	XFIX:	MOVE A,[LSTBIT-1]
07900		MOVE C,LINCNT
08000		HRRZ D,XGPPTR
08100	XFIXL:	ANDCAM A,LBUFL-1+2(D)
08200		ADDI D,LBUFL+1
08300		SOJG C,XFIXL
08400		POPJ P,
08500	>
08600	CORDWN:	MOVE T,JOBFF
08700		SUBI T,1
08800		CALLI T,11
08900		JRST 4,.
09000		POPJ P,
     

00100	FILNAM:	0
00200	FILEXT:	0
00300		0
00400	FILPPN:	0
00500	
00600	LKENT:	BLOCK 4
00700	
00800	XGSNAM:	0
00900	XGSEXT:	0
01000		0
01100	XGSPPN:	0
01200	
01300	IBUF:	BLOCK 3
01400	
01500	BITTAB:	FOR I←43,0,-1{1⊗I
01600	}
01700	BYTTAB:	FOR I←36,0,-6{REPEAT 6,{77⊗I}}
01800	
01900	DBUF:	BLOCK LBUFL+2
02000	
02100	PDL:	BLOCK LPDL
02200	
02300	END BEG